如何使用 CodeOwners 功能?
在做日常迭代交付时提交的 PR,指定组内成员进行代码评审,当代码变更涉及到某文件或目录 A 时,大多数情况下会指派固定的人员 B 进行代码评审。我们就可以称为 B 是 组件 A 的 CodeOwner。简单来说,Codeowner 用来定义谁负责仓库中的特定文件或目录。
想要使用 CodeOwner 功能,需要在仓库中指定的位置创建一个名为 CODEOWNERS 文件,它们仅适用于当前分支,指定的位置为:
- 在仓库的根目录中
- 在.gitee/目录中
- 在 docs/目录中
CODEOWNERS 文件案例
# Code Owners for a file
filename @username1 @username2
# Code Owners for a directory
# You can also use email addresses if you prefer.
directoryname/ @username1 XXXX@qq.com
# 正则匹配
*.rb @liwen
# The `docs/*` pattern will match files like
# `docs/getting-started.md` but not further nested files like
# `docs/build-app/troubleshooting.md`.
docs/* docs@example.com
# In this example, @octocat owns any file in an apps directory
# anywhere in your repository.
apps/ @octocat
当文件匹配文件中的多个 CODEOWNERS 规则时,将使用匹配文件的最后一个模式中的用户。例如:
README.md @user1
# This line would also match the file README.md
*.md @user2
README.md 的代码所有者是@user2,每个文件路径只能匹配一个 CODEOWNERS 规则。
语法转义
- 使用 \ 对以 # 开头的模式转义,使其被当作模式而不是注释;
- 使用 [ ] 定义分组范围,分组使用方法如下:
[Documentation]
ee/docs/ @docs
docs/ @docs
[Database]
README.md @database
model/db/ @database
[DOCUMENTATION]
README.md @docs
可以将某个部分设为可选,以便该部分中的代码审核的批准是可选的。 在代码所有者部分名称之前放置一个插入字符^。例如:
^[Documentation]
*.md @ligen @liqin
[Config]
*.yml @liwen @normalcoder
/app/models @xxx @xxx2
CodeOwner 指派规则
- 指定的 Codeowner 可以是 @用户名 或 指定邮箱地址
- 当指定的用户不存于平台,或不存在于仓库的开发者以上角色,不会指派对应用户,且不提供具体提示为什么没指派
- 指派名单范围仅限于仓 库成员名单,企业版超管、管理员与组织管理员不包含在内。
- CODEOWNER 归属只认最后一条规则
- CODEOWNER 指派不允许任何人移除,跟随 CODEOWNERS 文件更新而更新
- CODEOWNERS 加指派:相关 PR 加对应的 CODEOWNER,并添加指派日志(推送人指派了 CODEOWNER XXXX)
- CODEOWNERS 减指派:相关 PR 更新不移除指派,并添加指派日志(推送人移除了 XXXX 的 CODEOWNER 身份)